#include "util.h"
#include "bitelog.h"

namespace biteutil
{
    std::optional<std::string> JSON::serialize(const Json::Value& val)
    {
        Json::StreamWriterBuilder builder;
        std::unique_ptr<Json::StreamWriter> snp(builder.newStreamWriter());
        std::stringstream ss;
        int ret = snp->write(val, &ss);
        if(ret != 0)
        {
            ERR("序列化失败！");
            return std::optional<std::string>();
        }
        return ss.str();
    }     
    std::optional<Json::Value> JSON::unserialize(const std::string& input)
    {
        Json::CharReaderBuilder builder;
        std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
        Json::Value val;
        std::string errors;
        bool ret = reader->parse(input.c_str(), input.c_str() + input.size(), &val, &errors);
        if(ret == false)
        {
            ERR("{}反序列化失败:{}", input, errors);
            return std::optional<Json::Value>();
        }
        return val;
    }
}